home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / boot / netBoot.new / main.c < prev    next >
C/C++ Source or Header  |  1990-12-19  |  2KB  |  79 lines

  1. /*-
  2.  * main.c --
  3.  *    First-level boot program for Sprite. Takes its arguments
  4.  *    and uses tftp to download the appropriate kernel image.
  5.  *
  6.  * Copyright (c) 1987 by the Regents of the University of California
  7.  *
  8.  * Permission to use, copy, modify, and distribute this
  9.  * software and its documentation for any purpose and without
  10.  * fee is hereby granted, provided that the above copyright
  11.  * notice appear in all copies.  The University of California
  12.  * makes no representations about the suitability of this
  13.  * software for any purpose.  It is provided "as is" without
  14.  * express or implied warranty.
  15.  *
  16.  *
  17.  */
  18. #ifndef lint
  19. static char rcsid[] =
  20. "$Header: /sprite/src/boot/netBoot/RCS/main.c,v 1.1 90/10/10 15:13:28 jhh Exp Locker: jhh $ SPRITE (Berkeley)";
  21. #endif lint
  22.  
  23. #include    "boot.h"
  24.  
  25. #include    "saio.h"
  26. #include    "bootparam.h"
  27.  
  28. /*-
  29.  *-----------------------------------------------------------------------
  30.  * main --
  31.  *    Main function for downloading stuff.
  32.  *
  33.  * Results:
  34.  *    None.
  35.  *
  36.  * Side Effects:
  37.  *    Begins the booted program.
  38.  *
  39.  *-----------------------------------------------------------------------
  40.  */
  41. main() 
  42. {
  43.     register struct bootparam    *bp = *romp->v_bootparam;
  44.     struct saioreq        req;
  45.     int                  startAddr;
  46.     
  47.  
  48.     if ((strcmp(bp->bp_name, "vmunix") == 0) || (*bp->bp_name == '\0')) {
  49.     bp->bp_name = BOOT_FILE;
  50.     }
  51.  
  52.     printf ("SpriteBoot: %c%c(%x,%x,%x)%s\n",
  53.         bp->bp_dev[0], bp->bp_dev[1], bp->bp_ctlr,
  54.         bp->bp_unit, bp->bp_part, bp->bp_name);
  55.  
  56.     req.si_ctlr = bp->bp_ctlr;
  57.     req.si_unit = bp->bp_unit;
  58.     req.si_boff = (daddr_t)bp->bp_part;
  59.     req.si_boottab = bp->bp_boottab;
  60.     
  61.     if (devopen(&req)) {      /* Do all the hard work */
  62.     (*romp->v_exit_to_mon)();
  63.     }
  64.     etheropen( &req);
  65.     startAddr = tftpload(&req, bp);
  66.     devclose(&req);
  67.     
  68.     if (startAddr == -1){
  69.     (*romp->v_exit_to_mon)();
  70.     } else {
  71.     /*
  72.      * Jump to the address returned by tftpload
  73.      */
  74.     printf("Starting execution at 0x%x\n", startAddr);
  75.     startKernel(startAddr);
  76.     return(startAddr);
  77.     }
  78. }
  79.